import path from 'path';
import fs from 'fs';

/**
 * 获取当前日期的年月日路径
 * @returns 年月日路径字符串，如 "2025/07/29"
 */
export function getDatePath(): string {
  const now = new Date();
  const year = now.getFullYear();
  const month = String(now.getMonth() + 1).padStart(2, '0');
  const day = String(now.getDate()).padStart(2, '0');
  return `${year}/${month}/${day}`;
}

/**
 * 获取完整的文件上传目录路径
 * @param baseDir 基础目录，默认为 'public/uploads/images'
 * @returns 完整的目录路径
 */
export function getUploadDir(baseDir: string = 'public/uploads/images'): string {
  const datePath = getDatePath();
  const fullPath = path.join(process.cwd(), baseDir, datePath);
  
  // 确保目录存在
  if (!fs.existsSync(fullPath)) {
    fs.mkdirSync(fullPath, { recursive: true });
  }
  
  return fullPath;
}

/**
 * 生成唯一的文件名
 * @param originalName 原始文件名
 * @param prefix 文件名前缀，默认为 'news'
 * @returns 唯一的文件名
 */
export function generateUniqueFilename(originalName: string, prefix: string = 'news'): string {
  const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
  const ext = path.extname(originalName);
  return `${prefix}-${uniqueSuffix}${ext}`;
}

/**
 * 获取文件的完整URL路径
 * @param filename 文件名
 * @param baseUrl 基础URL，默认为 '/uploads/images'
 * @returns 完整的URL路径
 */
export function getFileUrl(filename: string, baseUrl: string = '/uploads/images'): string {
  const datePath = getDatePath();
  return `${baseUrl}/${datePath}/${filename}`;
}

/**
 * 获取文件的完整磁盘路径
 * @param filename 文件名
 * @param baseDir 基础目录，默认为 'public/uploads/images'
 * @returns 完整的磁盘路径
 */
export function getFilePath(filename: string, baseDir: string = 'public/uploads/images'): string {
  const datePath = getDatePath();
  return path.join(process.cwd(), baseDir, datePath, filename);
}

/**
 * 检查文件是否存在
 * @param filename 文件名
 * @param baseDir 基础目录，默认为 'public/uploads/images'
 * @returns 文件是否存在
 */
export function fileExists(filename: string, baseDir: string = 'public/uploads/images'): boolean {
  const filePath = getFilePath(filename, baseDir);
  return fs.existsSync(filePath);
}

/**
 * 删除文件
 * @param filename 文件名
 * @param baseDir 基础目录，默认为 'public/uploads/images'
 * @returns 是否删除成功
 */
export function deleteFile(filename: string, baseDir: string = 'public/uploads/images'): boolean {
  try {
    const filePath = getFilePath(filename, baseDir);
    if (fs.existsSync(filePath)) {
      fs.unlinkSync(filePath);
      return true;
    }
    return false;
  } catch (error) {
    console.error('删除文件失败:', error);
    return false;
  }
} 